Mencari Nilai Akar Dalam Persamaan Aljabar¶
Dalam Persamaan Mencari Nilai Akar dalam suatu Persamaan , dimana menggunakan Persamaan Non Linear, Berikut dibedakan dalam 4 Metode
- Metode Bisection
- Metode Regula- Falsi
- Metode Newton Raphson
- Metode Secant
Metode Bisection¶
Metode biseksi ini membagi range menjadi 2 bagian, dari dua bagian ini dipilih bagian mana yang mengandung akar sedangkan bagian yang tidak mengandung akar akan dibuang. Hal ini dilakukan berulang-ulang hingga diperoleh suatu akar persamaan.
Keuntungan dan Kerugian dari Metode Bisection
-
Keuntungan: Metode pembagian dua sangat sederhana karena iterasi pada setiap tahap tidak tergantung pada nilai fungsi fx n () tetapi hanya pada tanda-tandanya. Juga, konvergensi metode ini tidak bersyarat. Metode ini konvergen selalu, sehingga pasti konvergen.
-
Kerugian: Metode ini sangat lambat karena menyatu secara linear. Akibatnya, diperlukan sejumlah besar iterasi untuk mendapatkan hasil yang moderat hingga tingkat akurasi tertentu dan dengan demikian metode ini sangat melelahkan.
Perhitungan Mencari Nilai Akar dengan Metode Bisection¶
Dalam perhitungan mencari Nilai Akar dengen Metode Bisection
- Tentukan batas bawah (a) dan batas atas (b). Kemudian dihitung nilai tengah : $c = {a+b \over 2}$.
- Dari nilai c ini perlu dilakukan pengecekan keberadaan akar. Secara matematik, suatu range terdapat akar persamaan bila f(a) dan f(b) berlawanan tanda atau dituliskan :$𝑓(𝑎).𝑓(𝑏)<0$.
- Setelah diketahui di bagian mana terdapat akar, maka batas bawah dan batas atas diperbarui sesuai dengan range dari bagian yang mempunyai akar.
Algoritma Mencari Akar dengan Motode Bisection¶
-
Definisikan fungsi f(x) yang akan dicari akarnya
-
Tentukan nilai a dan b
-
Tentukan toleransi $e$ dan iterasi maksimum N
-
Hitung $f(a)$ dan $f(b)$
-
Jika $f(a).f(b)>0 $maka proses dihentikan karena tidak ada akar, bila tidak maka dilanjutkan
-
Hitung $x = (a+b)/2$
-
Hitung $f(x)$
-
Bila $f(x).f(a)<0$ maka $b = x$ dan $f(b)=f(x)$, bila tidak maka $a=x$ dan $f(a)=f(x)$
-
Jika $|b-a| < e$,dimana ketika iterasi maks maka proses dihentikan dan didapatkan akar x, bila tidak, ulangi langkah 6
Langkah Menghitung Dengan Algoritma mencari Akar dengan Metode Bisection¶
-
Pada Langkah Awal Mendifinisikan sebuah fungsi f(x), dimana f(x) yang akan digunakan adalah : $f(x) = x^2 - 5x +6$
-
Langkah kedua menentukan Nilai a dan b, mengambil nilai batas awal (a) = 1 dan nilai batas bawahnya (b) = 2.4
-
Langkah ketiga menentukan toleransi tingkat error dan iterasi maksimum (N), pada langkah ini tolerasi tingkat error yang akan digunakan $=0,0001$ dan iterasi maksimum yang digunakan $=50$
-
Menghitung f(a) dan f(b), menghitung f(a) bisa kita gunakan pada fungsi f(x) pada langkah pertama.Dimana $f(a)=1^2-5(1)+6=2$ dan $f(b)=(2.4)^2-5(2.4)+6=-0.2400000000000002$
-
Mengecek dengan kondisi ketika $ f(a).f(b)>0$ maka proses itu akan diberhentikan, bila $f(a).f(b)<0$ maka akan lanjut ke proses berikutnya.
Dimana ketika $f(a)$ yang didapatkan = 2 dan $f(b) = -0.2400000000000002$ maka $ f(a).f(b) = (2) x (-0.2400000000000002) = -0.4800000000000004$ maka sudah dapat diketahui $f(a).f(b) < 0$
-
Pada langkah ini menghitung x = (a+b)/2, dimana a =1 dan b = 2.4 maka x = (1+2.4)/2 = 1.7
-
Setelah mendapatkan nilai $ x $ maka menghitung nilai $f(x)nya$ dengan $ x = 1.7$ maka $f(1.7)= (1.7)^2 -5(1.7)+6 = 0.3899999999999997 $, maka didapatkan $f(x) = 0.3899999999999997$
-
Melakukan pengecekan bila $f(x).f(a)<0$ maka $b = x$ dan $f(b)=f(x)$, tapi ketika $f(x).f(a)$ tidak $<$ dari 0 maka $a =x$ dan $f(a) = f(x)$ , dimana f(x) = 0.3899999999999997 dan $f(a) = 2 $ maka $f(x).f(a) = 0.7799999999999994 $ tidak $< dari \quad 0$ maka $a = x$, jadi $a = 1,7 $ dan $ f(a) = 0.3899999999999997 $
-
Maka Langkah berikutnya mengecek jika $|b-a|<e$ atau Iterasi sudah mencapai iterasi maksimum maka proses dihentikan dan mendapatkan akar yang dicari. Dengan mengecek hasil dari $|b-a|<e$ maka $|b-a| =| 2.4 - 1.7|=0.7$ ,dapat diketahui bahwa $|b-a|$ tidak $<$ dari e maka terus melakukan iterasi sampai mendapatkan nilai akar yang dicari atau sudah sampai dengan iterasi maksimum
Implementasi Algoritma Metode Bisection Dengan Python¶
Pada Implementasi Algoritma Metode Bisection ini, Pada Langkah pertama ini membuat fungsi f(x) untuk bisa langsung memudahkan dalam perhitungan
def f(x): return x**2 - 5*x + 6
Pada Langkah Berikutnya membuat variabel kosong seperti variabel a dan b, serta error yang akan digunakan
error = 0.0001 a = 1 b = 2.4
Langkah Selanjutnya membuat fungsi , def Bisection untuk bisa langsung mengkalkulasi hasil perhitungan pada fungsi yang digunakan diatas dan , memberikan suatu iterasi (looping) ketika ada kondisi yang sudah terpenuhi
def bisection(a,b): iteration = True i = 0 max_iter = 50 while iteration and i < max_iter: if f(a)*f(b) < 0: x = (a+b)/2 if f(a)*f(x) < 0: b = x print("Jika f(a)*f(x) < 0 maka b = x, b = ",x) if f(b)*f(x) < 0: a = x print("Jika f(b)*f(x) < 0 maka a = x, b = ",x) if abs(a-b) < error: iteration = False else: i+=1 else: print('tidak ditemukan akar') print('x =', x) bisection(a,b)
Dapat kita ketahui pada program diatas dimana memberikan sebuah inisial terlebih dahulu dimana iterasi bervalue True, i = 0, dan iterasi maksimum yang digunakan 50.
DImana pada fungsi perulangan pada while iterasi dan i < max_iterasi, ketika kondisi telah terpenuhi maka akan melanjutkan ke kondisi berikutnya dimana pada kondisi ini f(a).f(b)< 0, ketika kondisinya telah tercapai maka melanjutkan ke proses perhitungan x = (a+b)/2. Ketika sudah melakukan proses pencarian x maka melanjutkan ke proses kondisi untuk melakukan swap (perubahan) dengan b =x ketika kondisi f(a).f(x)<0. atau kondisi f(x).f(b)<0 maka akan swap a = x
if f(a)*f(b) < 0: x = (a+b)/2 if f(a)*f(x) < 0: b = x print("Jika f(a)*f(x) < 0 maka b = x, b = ",x) if f(b)*f(x) < 0: a = x print("Jika f(b)*f(x) < 0 maka a = x, b = ",x)
Lanjut melakukan pengecekan pada kondisi ketika nilai dari a-b < error maka iterasi akan bernilai False dan bila kondisi ini tidak terpenuhi maka melakukan proses penambahan i+=1
if abs(a-b) < error: iteration = False else: i+=1
Maka ketika proses sudah berhasil terpenuhi maka iterasi akan False dan memprint hasil dari nilai akar yang di peroleh . Berikut Hasil yang diperoleh dari Hasil Program
Jika f(b)*f(x) < 0 maka a = x, b = 1.7 Jika f(a)*f(x) < 0 maka b = x, b = 2.05 Jika f(b)*f(x) < 0 maka a = x, b = 1.875 Jika f(b)*f(x) < 0 maka a = x, b = 1.9625 Jika f(a)*f(x) < 0 maka b = x, b = 2.0062499999999996 Jika f(b)*f(x) < 0 maka a = x, b = 1.9843749999999998 Jika f(b)*f(x) < 0 maka a = x, b = 1.9953124999999998 Jika f(a)*f(x) < 0 maka b = x, b = 2.0007812499999997 Jika f(b)*f(x) < 0 maka a = x, b = 1.9980468749999998 Jika f(b)*f(x) < 0 maka a = x, b = 1.9994140624999996 Jika f(a)*f(x) < 0 maka b = x, b = 2.0000976562499995 Jika f(b)*f(x) < 0 maka a = x, b = 1.9997558593749996 Jika f(b)*f(x) < 0 maka a = x, b = 1.9999267578124995 Jika f(a)*f(x) < 0 maka b = x, b = 2.0000122070312494 x = 2.0000122070312494
Metode Regula Falsi¶
Metode ini adalah metode tertua untuk menemukan akar sebenarnya dari persamaan f (x) = 0. Ia juga dikenal sebagai metode akor atau metode interpolasi linier. Seperti metode pembagian dua bagian, posisi yang salah satu metodenya dimulai dengan dua titik $a_0$dan $b_0$ sedemikian rupa sehingga f ($a_0$) dan f($b_0$) memiliki tanda-tanda yang berlawanan, yang menyiratkan oleh teorema nilai menengah bahwa fungsi f memiliki akar dalam interval $[a_0, b_0]$, dengan asumsi kesinambungan dari fungsi f.
-
Metode pencarian akar persamaan dengan memanfaatkan kemiringan dan selisih tinggi dari dua titik batas range. Dua titik a dan b pada fungsi f(x) digunakan untuk mengestimasi posisi c dari akar interpolasi linier. Dikenal dengan metode False Position Metode ini juga merupakan penyempurna dari metode bisection
-
Secara umum, rumus untuk Metode Regula Falsi ini adalah sebagai berikut $$ x_{n+1} = x_n - {f(x_n)|(x_n - x_{n-1})| \over f(x_n)- f(x_{n-1})} $$
Urutan Konvergensi Metode Regula-Falsi¶
Dapat ditunjukkan bahwa kesalahan pada langkah (n + 1) terkait dengan kesalahan pada langkah ke-n oleh ekspresi $$ {ε_{n+1} \over ε_n} ≅ A $$ di mana A adalah konstanta tergantung pada fungsinya $f$. Ini menunjukkan bahwa urutan iterasi berurutan ${x_n}$ menyatu secara linear ke nilai akar
Algoritma Mencari Akar dengan Motode Regula-Falsi¶
1.Definisikan fungsi f(x) yang akan dicari akarnya
2.Masukkan interval $[a,b]$ dimana akar berada, atau bisa dengan menententukan nilai a dan b
3.Tentukan toleransi e dan iterasi maksimum N
4.Hitung f(a) dan f(b)
5.Mengecek nilai $f(a).f(b) <0$ bila tidak maka proses nilai f(a).f(b)>0, akan memberhentikan proses perhitungan (program)
6.Mengkalkulasi $x = {(a|f(b)|+b|f(a)|) \over |f(a)| +|f(b)|}$
7.Jika f(a).f(x)<0 maka b = x, ketika tidak jika f(x)f(b)<0 maka a = x
8.Jika |b-a|< ε, ε menjadi akurasi yang ditentukan. Lalu lanjutkan ke Langkah 9 yang lain Langkah 4
9.Cetak nilai x yang dibutuhkan akar
Langkah Menghitung Dengan Algoritma mencari Akar dengan Metode Regula Falsi¶
-
Pada Langkah Awal Mendifinisikan sebuah fungsi f(x), dimana f(x) yang akan digunakan adalah : $f(x) = x^2 - 5x +6$
-
Langkah kedua menentukan Nilai a dan b, mengambil nilai batas awal (a) = 1 dan nilai batas bawahnya (b) = 2.4 . Maka dapat kita ketahui interval $[a,b]= [1,2.4]$
-
Langkah ketiga menentukan toleransi tingkat error dan iterasi maksimum (N), pada langkah ini tolerasi tingkat error yang akan digunakan $=0,0001$ dan iterasi maksimum yang digunakan $=50$
-
Menghitung f(a) dan f(b), menghitung f(a) bisa kita gunakan pada fungsi f(x) pada langkah pertama.Dimana $f(a)=1^2-5(1)+6=2$ dan $f(b)=(2.4)^2-5(2.4)+6=-0.2400000000000002$
-
Mengecek dengan kondisi ketika $ f(a).f(b)>0$ maka proses itu akan diberhentikan, bila $f(a).f(b)<0$ maka akan lanjut ke proses berikutnya. Dimana ketika $f(a)$ yang didapatkan $= 2$ dan $f(b) = -0.2400000000000002$ maka $ f(a).f(b) $= 2 x -0.2400000000000002 = -0.4800000000000004 maka sudah dapat diketahui $f(a).f(b) < 0$
-
Mengkalkulus $x = {(a|f(b)|+b|f(a)|) \over |f(a)| +|f(b|}$, maka $$ x = {(1|-0.2400000000000002|+2.4|2|) \over |2| +|-0.2400000000000002|} \\ x = {1.2400000000000002 + 4.8 \over 2+0.2400000000000002} \\ x = {6.04 \over 2.24 } \\ x = 2.696428571428571 $$
-
Pada langkah ini mengecek apakah $ f(a).f(x)<0$ maka $b = x$, ketika tidak jika $f(x)f(b)<0$ maka $a = x$. pertama harus menghitung $f(x)nya$ dimana x nya = $2.696428571428571$, maka $$ f(x)= x^2 -5x+6, \quad dimana (x)nya = 2.69642857142857 \\ f(x) = (2.69642857142857)^2-5(2.69642857142857)+6 \\ f(x) = 7.270727040816318 - 13.482142857142856+6 \\ f(x) = -0.2114158163265376 $$ Mengecek apakah $f(a).f(x)<0$, dimana $f(a)=2,$ dan $f(x)=-0.2114158163265376$, maka $$ f(a).f(x)= 2 \quad X -0.2114158163265376 = -0.4228316326530752 $$ Dapat diketahui bahwa $f(a).f(x)<0$ maka set b = x, $b = 2.696428571428571$
-
Mengecek $|b-a|< ε$, ε menjadi akurasi yang ditentukan. Lalu lanjutkan ke Langkah berikutnya yang lain Langkah 4 , maka melakukan pengecekan $$ |b-a|= 2.696428571428571 -2 = 0.6964285714285712 \\ |b-a| = 0.6964285714285712 \quad tidak < 0 , maka \ mengulang \quad ke langkah \quad ke 4 $$ Akan terus melakukan proses iterasi sampai $|b-a|<e$ ketika proses berhasil maka lanjut ke langkah 9
-
Mencetak nilai x , itu lah hasil dari nilai akar yang diperoleh
Implementasi Algoritma Metode Regula-Falsi Dengan Python¶
Pada Implementasi Algoritma Metode Regulasi-Falsi ini, Pada Langkah pertama ini membuat fungsi f(x) untuk bisa langsung memudahkan dalam perhitungan
def f(x): return x**2 - 5*x + 6
Pada Langkah Berikutnya membuat variabel kosong seperti variabel a dan b, serta error yang akan digunakan
error = 0.0001 a = 1 b = 2.4
Langkah Selanjutnya membuat fungsi , def Regulasi_falsi untuk bisa langsung mengkalkulasi hasil perhitungan pada fungsi yang digunakan diatas dan , memberikan suatu iterasi (looping) ketika ada kondisi yang sudah terpenuhi
def regulasi_falsi(a,b): i=0 max_iter = 50 iteration = True while iteration and i < max_iter: if f(a)*f(b) < 0: x = (a*abs(f(b)) + b*abs(f(a))) / (abs(f(a)) + abs(f(b))) if f(a)*f(x) < 0: b = x print("Jika f(a) x f(x) < 0 , maka b = x , b = ",x) if f(x)*f(b) < 0: a = x print("Jika f(b) x f(x) < 0 , maka a = x , a = ",x) if abs(a-b) < error: iteration = False else: i+=1 else: print('tidak di temukan akar') print('x =', x) regulasi_falsi(a,b)
Dapat kita ketahui pada program diatas dimana memberikan sebuah inisial terlebih dahulu dimana iterasi bervalue True, i = 0, dan iterasi maksimum yang digunakan 50.
DImana pada fungsi perulangan pada while iterasi dan i < max_iterasi, ketika kondisi telah terpenuhi maka akan melanjutkan ke kondisi berikutnya dimana pada kondisi ini f(a).f(b)< 0, ketika kondisinya telah tercapai maka melanjutkan ke proses perhitungan $x = {(a|f(b)|+b|f(a)|) \over |f(a)| +|f(b|}$. Ketika sudah melakukan proses pencarian x maka melanjutkan ke proses kondisi untuk melakukan swap (perubahan) dengan b =x ketika kondisi f(a).f(x)<0. atau kondisi f(x).f(b)<0 maka akan swap a = x
if f(a)*f(b) < 0: x = (a*abs(f(b)) + b*abs(f(a))) / (abs(f(a)) + abs(f(b))) if f(a)*f(x) < 0: b = x print("Jika f(a) x f(x) < 0 , maka b = x , b = ",x) if f(x)*f(b) < 0: a = x print("Jika f(b) x f(x) < 0 , maka a = x , a = ",x)
Lanjut melakukan pengecekan pada kondisi ketika nilai dari a-b < error maka iterasi akan bernilai False dan bila kondisi ini tidak terpenuhi maka melakukan proses penambahan i+=1
if abs(a-b) < error: iteration = False else: i+=1
Maka ketika proses sudah berhasil terpenuhi maka iterasi akan False dan memprint hasil dari nilai akar yang di peroleh . Berikut Hasil yang diperoleh dari Hasil Program
Jika f(a) x f(x) < 0 , maka b = x , b = 2.25 Jika f(a) x f(x) < 0 , maka b = x , b = 2.142857142857143 Jika f(a) x f(x) < 0 , maka b = x , b = 2.076923076923077 Jika f(a) x f(x) < 0 , maka b = x , b = 2.0400000000000005 Jika f(a) x f(x) < 0 , maka b = x , b = 2.020408163265306 Jika f(a) x f(x) < 0 , maka b = x , b = 2.010309278350516 Jika f(a) x f(x) < 0 , maka b = x , b = 2.0051813471502595 Jika f(a) x f(x) < 0 , maka b = x , b = 2.0025974025974027 Jika f(a) x f(x) < 0 , maka b = x , b = 2.001300390117035 Jika f(a) x f(x) < 0 , maka b = x , b = 2.0006506180871835 Jika f(a) x f(x) < 0 , maka b = x , b = 2.000325414904003 Jika f(a) x f(x) < 0 , maka b = x , b = 2.0001627339300247 Jika f(a) x f(x) < 0 , maka b = x , b = 2.000081373586134 Jika f(a) x f(x) < 0 , maka b = x , b = 2.000040688448549 Jika f(a) x f(x) < 0 , maka b = x , b = 2.0000203446381697 Jika f(a) x f(x) < 0 , maka b = x , b = 2.000010172422562 Jika f(a) x f(x) < 0 , maka b = x , b = 2.00000508623715 Jika f(a) x f(x) < 0 , maka b = x , b = 2.0000025431250426 Jika f(a) x f(x) < 0 , maka b = x , b = 2.0000012715641384 Jika f(a) x f(x) < 0 , maka b = x , b = 2.000000635782474 Jika f(a) x f(x) < 0 , maka b = x , b = 2.0000003178913377 Jika f(a) x f(x) < 0 , maka b = x , b = 2.000000158945694 Jika f(a) x f(x) < 0 , maka b = x , b = 2.000000079472853 Jika f(a) x f(x) < 0 , maka b = x , b = 2.000000039736428 Jika f(a) x f(x) < 0 , maka b = x , b = 2.0000000198682146 Jika f(a) x f(x) < 0 , maka b = x , b = 2.0000000099341078 Jika f(a) x f(x) < 0 , maka b = x , b = 2.0000000049670534 Jika f(a) x f(x) < 0 , maka b = x , b = 2.000000002483527 Jika f(a) x f(x) < 0 , maka b = x , b = 2.000000001241763 Jika f(a) x f(x) < 0 , maka b = x , b = 2.000000000620882 Jika f(a) x f(x) < 0 , maka b = x , b = 2.0000000003104406 Jika f(a) x f(x) < 0 , maka b = x , b = 2.0000000001552207 Jika f(a) x f(x) < 0 , maka b = x , b = 2.00000000007761 Jika f(a) x f(x) < 0 , maka b = x , b = 2.0000000000388054 Jika f(a) x f(x) < 0 , maka b = x , b = 2.0000000000194023 Jika f(a) x f(x) < 0 , maka b = x , b = 2.0000000000097016 Jika f(a) x f(x) < 0 , maka b = x , b = 2.0000000000048503 Jika f(a) x f(x) < 0 , maka b = x , b = 2.0000000000024256 Jika f(a) x f(x) < 0 , maka b = x , b = 2.0000000000012124 Jika f(a) x f(x) < 0 , maka b = x , b = 2.0000000000006066 Jika f(a) x f(x) < 0 , maka b = x , b = 2.000000000000303 Jika f(a) x f(x) < 0 , maka b = x , b = 2.000000000000152 Jika f(a) x f(x) < 0 , maka b = x , b = 2.0000000000000755 Jika f(a) x f(x) < 0 , maka b = x , b = 2.000000000000038 Jika f(a) x f(x) < 0 , maka b = x , b = 2.0000000000000187 Jika f(a) x f(x) < 0 , maka b = x , b = 2.0000000000000098 Jika f(a) x f(x) < 0 , maka b = x , b = 2.0000000000000044 Jika f(a) x f(x) < 0 , maka b = x , b = 2.0000000000000027 x = 2.000000000000001
Metode Newton Raphson¶
Metode pencarian akar persamaan dengan memanfaatkan kemiringan dan selisih tinggi dari dua titik batas range. Dua titik a dan b pada fungsi f(x) digunakan untuk mengestimasi posisi c dari akar interpolasi linier. Dikenal dengan metode False Position Metode ini juga merupakan penyempurna dari metode bisection.
Prinsip Metode Newton Raphson
Metode Newton-Raphson adalah metode pencarian akar suatu fungsi f(x) dengan pendekatan satu titik, dimana fungsi f(x) mempunyai turunan. Metode ini dianggap lebih mudah dari Metode Bagi-Dua (Bisection Method) karena metode ini menggunakan pendekatan satu titik sebagai titik awal.
Keuntungan dan Kerugian dari Metode Newton-Raphson
-
Keuntungan: Keuntungan dasar dari metode Newton-Raphson adalah bahwa ia menyatu dengan sangat cepat, karena urutan konvergensi dari metode ini adalah kuadratik.
-
Kerugian: Metode Newton – Raphson gagal jika f '(x) = 0 atau sangat kecil di lingkungan root yang diinginkan. Dalam kasus seperti itu, metode regula-falsi harus digunakan. Perkiraan awal harus diambil sangat dekat dengan root yang diinginkan, jika tidak metode ini dapat berbeda. Kadang-kadang, metode ini mungkin tidak cocok untuk fungsi f (x) yang turunannya sulit dihitung.
Algoritma Mencari Akar dengan Motode Newton Raphson¶
1.Definisikan fungsi f(x) , f'(x) yang akan dicari akarnya
2.Tentukan tebakan awal akar (katakanlah $x_0$) dan set n = 0
3.Tentukan toleransi e dan iterasi maksimum N
4.Hitung $x_{n+1}=x_n -[f(x_n)/f'(x)_n]$
5.Jika $|x_{n+1} - x_n|<e$ , di mana ε adalah akurasi yang ditentukan, lalu lanjutkan ke Langkah 7, bila lanjut ke langkah 6
6.Set n = n+1 dan pergi ke langkah 4
7.Cetak nilai $ x_n$ yang merupakan nilai akar yang diperlukan
Langkah Menghitung Dengan Algoritma mencari Akar dengan Metode Newton Raphson¶
-
Pada Langkah Awal Mendifinisikan sebuah fungsi f(x), dimana f(x) yang akan digunakan adalah : $f(x) = x^2 - 5x +6$ dan $f'(x)= 2x-5$
-
Langkah kedua menentukan Nilai $x_0$ dan $x_1$, mengambil nilai batas awal $(x_0)= 1$ dan nilai batas bawahnya $(x_1) = 2.4$
-
Langkah ketiga menentukan toleransi tingkat error dan iterasi maksimum (N), pada langkah ini tolerasi tingkat error yang akan digunakan $=0,0001$ dan iterasi maksimum yang digunakan $=50$
-
Pada Langkah ini mengecek pada $(x_0) = 1$ dan $(x_1)$ = 2.4. Apakah $|x_1 - x_0|
e maka lanjut ke proses berikutnya -
Menghitung $f(x_1)$ dan $f'(x_1)$, menghitung $f(x_1)$ bisa kita gunakan pada fungsi f(x) dan pada $f'(x_1)$ bisa kita gunakan pada fungsi f'(x) langkah pertama. Dimana $f(x_1)=(2.4)^2-5(2.4)+6= -0.2400000000000002$ dan $f'(x_1)=2 x (2.4) -5 =-0.20000000000000018$
-
Mengecek dengan kondisi ketika $|x_{n+1} - x_n|<e$ , di mana ε adalah akurasi yang ditentukan, lalu lanjutkan ke Langkah 8. Maka $X_2 = X_1 -{f(x_1) \over f'(x_1)}$. $$ X_2 = X_1 -{f(x_1) \over f'(x_1)} \\ X_2 = 2.4 -{-0.2400000000000002 \over -0.20000000000000018} \\ X_2 = 2.4 - 1.2 \\ X_2 = 1.2 $$
-
Melakukan Proses pengecekan ketika sudah memperoleh $x_2= 1.2$ maka apakah $|x_2 - x_1|<e$. Ketika kondisi tidak terpenuhi mengulang proses iterasi dengan melakukan penambahan n+1 jadi berpindah untuk mencari $x_3$. Bila proses kondisi terpenuhi dengan $|x_{n+1} - x_n|<e$ maka lanjut ke proses langkah ke 9
-
Cetak nilai $ x_n$ yang merupakan nilai akar yang diperlukan
Implementasi Algoritma Metode Newton Raphson Dengan Python¶
Pada Implementasi Algoritma Metode Newton Raphson ini, Pada Langkah pertama ini membuat fungsi f(x) dan fungsi f'(x) untuk bisa langsung memudahkan dalam perhitungan
def f(x): return x**2 - 5*x + 6 def f_turunan(x): return 2*x - 5
Pada Langkah Berikutnya membuat variabel kosong seperti variabel x0, serta error yang akan digunakan
error = 0.0001 xo = 0
Langkah Selanjutnya membuat fungsi , def Newton Raphson untuk bisa langsung mengkalkulasi hasil perhitungan pada fungsi yang digunakan diatas dan memberikan suatu iterasi (looping) ketika ada kondisi yang sudah terpenuhi
def newton_raphson(x0): iteration = True n = 0 x_next = x0 print("X_0 =",x_next) while iteration: x_curr = x_next x_next = x_curr - (f(x_curr)/f_turunan(x_curr)) print("x_(",n+1,") = ",x_next) if abs(x_next - x_curr) < error: iteration = False else: n+=1 print("x = ",x_next) newton_raphson(xo)
Dapat kita ketahui pada program diatas dimana memberikan sebuah inisial terlebih dahulu dimana iterasi (n) = 0 ,dan inisial iterasi bervalue True, dimana n = 0 akan dimulai dari iterasi 0 untuk bisa melakukan sebuah perulangan (looping )
DImana pada fungsi perulangan pada while iteration, ketika kondisi telah terpenuhi maka akan melanjutkan ke perpindahan dan perhitungan setelah melakukan sebuah while iterasi
x_curr = x_next x_next = x_curr - (f(x_curr)/f_turunan(x_curr)) print("x_(",n+1,") = ",x_next)
Lalu melakukan pengecekan apakah $|x_{n+1} - x_n|<e$ bila benar maka iterasi = False dan memberikan nilai x sebagai nilai akar yang dicari, dan bila $|x_{n+1} - x_n|$ tidak $<e$ maka melanjutkan iterasi (looping) dengan n+=1
if abs(x_next - x_curr) < error: iteration = False else: n+=1
Maka ketika proses sudah berhasil terpenuhi maka iterasi akan False dan memprint hasil dari nilai akar yang di peroleh . Berikut Hasil yang diperoleh dari Hasil Program
X_0 = 0 x_( 1 ) = 1.2 x_( 2 ) = 1.7538461538461536 x_( 3 ) = 1.9593973037272008 x_( 4 ) = 1.9984752398055106 x_( 5 ) = 1.9999976821746035 x_( 6 ) = 1.9999999999946272 x = 1.9999999999946272
Metode Secant¶
Metode secant merupakan perbaikan dari metode regula-falsi dan newton raphson dimana kemiringan dua titik dinyatakan sacara diskrit, dengan mengambil bentuk garis lurus yang melalui satu titik.
- Metode Newton Raphson memerlukan perhitungan turunan fungsi f’(x). Tidak semua fungsi mudah dicari turunannya terutama fungsi yang bentuknya rumit. Turunan fungsi dapat dihilangkan dengan cara menggantinya dengan bentuk lain yang ekivalen Modifikasi metode Newton Raphson dinamakan metode Secant.
Pada Metode Newton-Raphson memerlukan syarat wajib yaitu fungsi f(x) harus memiliki turunan f'(x). Sehingga syarat wajib ini dianggap sulit karena tidak semua fungsi bisa dengan mudah mencari turunannya. Oleh karena itu muncul ide dari yaitu mencari persamaan yang ekivalen dengan rumus turunan fungsi. Ide ini lebih dikenal dengan nama Metode Secant. Ide dari metode ini yaitu menggunakan gradien garis yang melalui titik $ (x_0, f(x_0))$ dan $ (x_1, f(x_1))$. Perhatikan gambar dibawah ini.
secara umum rumus Metode Secant ini ditulis : $$ x_{n+1} = x_n - {f(x_n)[x_n- x{n-1}] \over f(x_n)-f(x_{n-1}) } $$
Algoritma Mencari Akar dengan Motode Secant¶
-
Definisikan fungsi f(x) yang akan dicari akarnya
-
Masukkan interval $[a,b]$ dimana akar berada, atau bisa dengan menententukan nilai a dan b
-
Tentukan toleransi e dan iterasi maksimum N
-
Hitung f(a) dan f(b)
-
Menghitung $x = a - [(b-a)/f(b)-f(a)]f(a)$
-
Jika $|a-b|< e, e$ di mana ε adalah akurasi yang ditentukan, lalu lanjutkan ke Langkah 8, bila tidak lanjut ke langkah 7
- Set a = b , b =x dan pergi ke langkah ke 4
- Cetak nilai x yang merupakan nilai akar yang dicari.
Langkah Menghitung Dengan Algoritma mencari Akar dengan Metode Secant¶
-
Pada Langkah Awal Mendifinisikan sebuah fungsi f(x), dimana f(x) yang akan digunakan adalah : $f(x) = x^2 - 5x +6$
-
Langkah kedua menentukan Nilai a dan b, mengambil nilai batas awal (a) = 1 dan nilai batas bawahnya (b) = 2.4 . Maka dapat kita ketahui interval $[a,b]= [1,2.4]$
-
Langkah ketiga menentukan toleransi tingkat error dan iterasi maksimum (N), pada langkah ini tolerasi tingkat error yang akan digunakan $=0,0001$ dan iterasi maksimum yang digunakan $=50$
-
Menghitung f(a) dan f(b), menghitung f(a) bisa kita gunakan pada fungsi f(x) pada langkah pertama.Dimana $f(a)=1^2-5(1)+6=2$ dan $f(b)=(2.4)^2-5(2.4)+6=-0.2400000000000002$
-
Menghitung $x = a - [(b-a)/f(b)-f(a)]f(a)$, maka $$ a = 1, b = 2.4,f(a) = 2, f(b)=-0.2400000000000002 \\ x = a - [(b-a)/f(b)-f(a)]f(a)\\ x = 1 - [(2.4 - 1)/-0.2400000000000002 - 2 ] 2 \\ x = 3.25 $$
-
Pada langkah ini mengecek apakah $|a-b|< e, e$ di mana ε adalah akurasi yang ditentukan, lalu lanjutkan ke Langkah 7, bila tidak lanjut ke langkah 6. Dapat kita ketahui bahwa $|a-b|= |1-2.4|=-1.4$ maka tidak bisa melanjutkan ke langkah 8 karena $|a-b|tidak < e $ maka lanjut ke langkah 7
-
Meng -Set a = b , b =x dan pergi ke langkah ke 4. dimana $$ a = b,maka \quad a = 2.4, b = 3.25 \quad dan \quad lanjut \quad keLangkah \quad ke-4 $$
-
Cetak nilai x yang merupakan nilai akar yang dicari.
Implementasi Algoritma Metode Secant Dengan Python¶
Pada Implementasi Algoritma Metode Secant ini, Pada Langkah pertama ini membuat fungsi f(x) untuk bisa langsung memudahkan dalam perhitungan
def f(x): return x**2 - 5*x + 6
Pada Langkah Berikutnya membuat variabel kosong seperti variabel a dan b, serta error yang akan digunakan
error = 0.0001 a = 1 b = 2.4
Langkah Selanjutnya membuat fungsi , def secant untuk bisa langsung mengkalkulasi hasil perhitungan pada fungsi yang digunakan diatas dan memberikan suatu iterasi (looping) ketika ada kondisi yang sudah terpenuhi
def secant(a,b): iteration = True while iteration: x = a - ((b-a) / (f(b) - f(a))) * f(a) print('x = a - ((b-a) / (f(b) - f(a))) * f(a)= ', x) if abs(a-b) < error: iteration = False else: a = b print("set a = b maka a = ",b) b = x print("set b = x maka b = ",x) print('x =', x) secant(a,b)
Dapat kita ketahui pada program diatas dimana memberikan sebuah inisial terlebih dahulu dimana iterasi bervalue True
Dimana pada fungsi perulangan pada while iteration, ketika kondisi telah terpenuhi maka akan melanjutkan ke proses perhitungan $x = a - [(b-a)/f(b)-f(a)]f(a)$ setelah melakukan sebuah while iterasi
while iteration: x = a - ((b-a) / (f(b) - f(a))) * f(a) print('x = a - ((b-a) / (f(b) - f(a))) * f(a)= ', x) if abs(a-b) < error: iteration = False else: a = b print("set a = b maka a = ",b) b = x print("set b = x maka b = ",x) print('x =', x)
Lanjut melakukan pengecekan pada kondisi ketika nilai dari a-b < error maka iterasi akan bernilai False dan bila kondisi ini tidak terpenuhi . Maka ketika proses sudah berhasil terpenuhi maka iterasi akan False dan memprint hasil dari nilai akar yang di peroleh . Dan ketika (a-b) tidak < error maka akan melakukan proses else : , dimana proses ini melakukan proses perpindahan (meng set a = b dan b = x)
if abs(a-b) < error: iteration = False else: a = b print("set a = b maka a = ",b) b = x print("set b = x maka b = ",x)
Berikut Hasil yang diperoleh dari Hasil Program
a = 1 b = 2.4 x = a - ((b-a) / (f(b) - f(a))) * f(a)= 2.25 set a = b maka a = 2.4 set b = x maka b = 2.25 x = a - ((b-a) / (f(b) - f(a))) * f(a)= 1.7142857142857166 set a = b maka a = 2.25 set b = x maka b = 1.7142857142857166 x = a - ((b-a) / (f(b) - f(a))) * f(a)= 2.068965517241379 set a = b maka a = 1.7142857142857166 set b = x maka b = 2.068965517241379 x = a - ((b-a) / (f(b) - f(a))) * f(a)= 2.016194331983806 set a = b maka a = 2.068965517241379 set b = x maka b = 2.016194331983806 x = a - ((b-a) / (f(b) - f(a))) * f(a)= 1.998779185106057 set a = b maka a = 2.016194331983806 set b = x maka b = 1.998779185106057 x = a - ((b-a) / (f(b) - f(a))) * f(a)= 2.0000200708123343 set a = b maka a = 1.998779185106057 set b = x maka b = 2.0000200708123343 x = a - ((b-a) / (f(b) - f(a))) * f(a)= 2.0000000244733602 set a = b maka a = 2.0000200708123343 set b = x maka b = 2.0000000244733602 x = a - ((b-a) / (f(b) - f(a))) * f(a)= 1.999999999999509 x = 1.999999999999509
Sekian TerimaKasih ;